package firstcontent.stack;

/**
 * @Author: fxy
 * @Date: 2022/02/15/10:51
 * @Description: 逃逸分析  new的对象是否有可能在方法外部调用
 */
public class EscapeAnalysis {
    public EscapeAnalysis obj;

    /**
     * 方法返回对象 发生逃逸
     * @return
     */
    public EscapeAnalysis getInstance(){
        return obj == null? new EscapeAnalysis():obj;
    }

    /**
     * 为成员属性赋值，发生逃逸
     */
    public void setObj(){
        this.obj = new EscapeAnalysis();
    }


    /**
     * 对象的作用域只在当前方法中有效，没有发生逃逸
     */
    public void useObj(){
        EscapeAnalysis e = new EscapeAnalysis();
    }

    /**
     * 有可能引用成员变量的值，可能发生逃逸
     */
    public void useObj1(){
        EscapeAnalysis e = getInstance();

    }
}
